package com.example.leetcode.c101_c200.c118;
/**
 * 给定一个非负整数 numRows，生成杨辉三角的前 numRows 行。
 *
 *
 *
 * 在杨辉三角中，每个数是它左上方和右上方的数的和。
 *
 * 示例:
 *
 * 输入: 5
 * 输出:
 * [
 *      [1],
 *     [1,1],
 *    [1,2,1],
 *   [1,3,3,1],
 *  [1,4,6,4,1]
 * ]
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/pascals-triangle
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

/**
 * 杨辉三角
 * @author zhanpengguo
 * @date 2020/10/3 10:56
 */
public class Solution {

    public List<List<Integer>> generate(int numRows) {
        List<List<Integer>> ans = new LinkedList<>();
        for (int i = 0; i < numRows; i++) {
            // 行数，每行的个数
            int row = i + 1;
            List<Integer> list = new ArrayList<>();
            for (int j = 0; j < row; j++) {
                // 值等于上一行i-1的值+i的值
                int num;
                if (j == 0 || j == row - 1) {
                    num = 1;
                } else {
                    // 上一行
                    List<Integer> list1 = ans.get(row - 2);
                    int num1 = list1.get(j - 1);
                    int num2 = j >= list1.size() ? 0 : list1.get(j);
                    num = num1 + num2;
                }
                list.add(num);
            }
            ans.add(list);
        }
        return ans;
    }

    public static void main(String[] args) {
        Solution solution = new Solution();
        List<List<Integer>> generate = solution.generate(0);
        generate.forEach(System.out::println);
    }
}
